/* 
 * File:   ray.cpp
 * Author: chaterolas
 * 
 * Created on 24 de junio de 2009, 06:06 PM
 */

#include "ray.h"

/**
 * Crea una instancia de rayo especiicando su punto de origen y su direccion.
 * @param o (vector de origen)
 * @param d (vector de direccion del rayo)
 */
Ray::Ray(const Vector3D &o, const Vector3D &d) {
    orig = new Vector3D(o.coor[0], o.coor[1], o.coor[2]);
    dir = new Vector3D(d.coor[0], d.coor[1], d.coor[2]);
}

/**
 * Crea una instancia de rayo especificando las coordenadas de su punto de
 * de origen y de su vector de direccion anclado al origen de el espacio
 * tridimensonal
 * @param ox, oy, oz (coordenadas en x, y & z del punto de origen)
 * @param dx, dy, dz (coordenadas en x, y & z del vector de direccion)
 */
Ray::Ray(double ox, double oy, double oz, double dx, double dy, double dz) {
    orig = new Vector3D(ox, oy , oz);
    dir = new Vector3D(dx, dy, dz);
}

/**
 * Destruye una instancia de rayo, ademas de sus respectivos componentes
 */
Ray::~Ray() {
    delete orig;
    delete dir;
}

/**
 * Asigna un nuevo vector de origen a este rayo.
 * @param v (Nuevo vector de origen)
 */
void Ray::setOrigin(const Vector3D &v) {
    orig->setCoor(0, v.coor[0]);
    orig->setCoor(1, v.coor[1]);
    orig->setCoor(2, v.coor[2]);;
}

/**
 * Regresa el actual vector de origen de este rayo.
 * @return vector (Actual vector de origen)
 */
Vector3D *Ray::getOrigin() {    
    return orig;
}

/**
 * Asigna un nuevo vector de direccion a este rayo.
 * @param v (Nuevo vector de direccion)
 */
void Ray::setDirection(const Vector3D &v) {
    dir->setCoor(0, v.coor[0]);
    dir->setCoor(1, v.coor[1]);
    dir->setCoor(2, v.coor[2]);
}

/**
 * Regresa ek actual vector de direccion de este rayo.
 * @return vector (Actual vector de direccion)
 */
Vector3D *Ray::getDirection() {    
    return dir;
}

